import * as XLSX from 'xlsx'

/**
 * 导出Excel文件
 * @param {Array} data 表格数据
 * @param {String} fileName 文件名
 * @param {Array} columns 列配置
 * @param {String} sheetName 工作表名
 */
export function exportExcel(data, fileName, columns, sheetName = 'Sheet1') {
  // 准备表头和数据
  const headers = columns.map(col => col.label)
  const rows = data.map(item => {
    return columns.map(col => {
      return col.formatter ? col.formatter(item[col.prop]) : item[col.prop]
    })
  })
  
  // 创建工作簿
  const wb = XLSX.utils.book_new()
  const ws = XLSX.utils.aoa_to_sheet([headers, ...rows])
  
  // 添加工作表并导出
  XLSX.utils.book_append_sheet(wb, ws, sheetName)
  XLSX.writeFile(wb, `${fileName}.xlsx`)
}

/**
 * 导入Excel文件
 * @param {File} file Excel文件
 * @returns {Promise<Array>} 解析后的数据
 */
export function importExcel(file) {
  return new Promise((resolve, reject) => {
    const reader = new FileReader()
    
    reader.onload = (e) => {
      try {
        const data = new Uint8Array(e.target.result)
        const workbook = XLSX.read(data, { type: 'array' })
        const firstSheet = workbook.Sheets[workbook.SheetNames[0]]
        const jsonData = XLSX.utils.sheet_to_json(firstSheet)
        resolve(jsonData)
      } catch (error) {
        reject(error)
      }
    }
    
    reader.onerror = (error) => reject(error)
    reader.readAsArrayBuffer(file)
  })
}